package maven.demo2;

/**
 * Hello world!
 */
public class App {
    public static void main(String[] args) {
        System.out.println("Hello World!");

        /**
         * demo1: 多态 -- 父类的实例引用可以指向: 1. 父类对象 2. 子类对象
         * */
        /*
        Animal obj1 = new Animal();

        Animal obj2 = new Dog(); // 父类的引用是可以指向子类对象的

        Animal obj3 = new Cat(); // Cat 继承自父类的方法

        //  Dog obj3 = new Animal(); // 报错

        obj1.eat();

        obj2.eat();
        ((Dog) obj2).watchDoor();

        obj3.eat();
        */

        /**
         * demo2: 使用 instanceof 进行原型判断，方便类型转换时的报错处理
         * */

        Dog dog = new Dog();
        Animal animal = dog; // 自动类型提升，向上类型转换， 小-->大
        if (animal instanceof Dog) {
            Dog dog2 = (Dog) animal; // 强制类型转换，向下类型转换，大-->小
        } else {
            System.out.println("无法进行类型转换，不能转换为 Dog 类型");
        }
        if (animal instanceof Cat) {
            Cat cat = (Cat) animal; // 1. 编译时 Cat 类型 2. 运行时 Dog 类型，不匹配，会报错
        } else {
            System.out.println("无法进行类型转换，不能转换为 Cat 类型");
        }



        // demo3
//        maven.demo1.App.main();
    }
}
